#ifndef REPRESENTATIONENGINE_HPP
#define REPRESENTATIONENGINE_HPP

#include <windows.h>		// windows.h must be included before glut.h to avoid errors.
#include <gl/freeglut.h>
#include <iostream>

#include "GameEngine.hpp"
#include "Menu.hpp"
#include "Scene.hpp"

class GameEngine;

class RepresentationEngine {
private:
    GameEngine* gameEngine;

public:
    RepresentationEngine(GameEngine* gameEngine);
    ~RepresentationEngine();

    float getElapsedTime();
    void handleDisplay();
    void handleKey(unsigned char key, int mouseX, int mouseY);
    void handleKeyUp(unsigned char key, int mouseX, int mouseY);
    void handleMouse(int button, int state, int x, int y);
    void handleReshape(int width, int height);
    void handleSpecialKey(int key, int mouseX, int mouseY);
    void handleSpecialKeyUp(int key, int mouseX, int mouseY);
    virtual void init(Menu* menu) = 0;
    virtual void init(Scene* scene) = 0;
    virtual void render(Menu* menu, Scene* scene) = 0;
    virtual void render(Scene* scene) = 0;
    void runMainLoop();
    virtual void zoomIn();
    virtual void zoomOut();
};

#endif
